//进行axios二次封装:使用请求与响应拦截器
import axios from 'axios'
import { message as messageApi } from 'antd';

//第一步:利用axios对象的create方法,去创建axios实例(其他的配置:基础路径、超时的时间)
const request = axios.create({
    //基础路径
    // baseURL: import.meta.env.VITE_APP_BASE_API, //基础路径上会携带/api
    // baseURL: 'https://www.zhixuanqixing.xyz',
    timeout: 5000, //超时的时间的设置
})

//第二步:request实例添加请求与响应拦截器
request.interceptors.request.use((config) => {
    //获取用户相关的小仓库:获取仓库内部token,登录成功以后携带给服务器
    config.headers.authorization = localStorage.token
    //config配置对象,headers属性请求头,经常给服务器端携带公共参数
    //返回配置对象
    return config
})

//第三步:响应拦截器
request.interceptors.response.use(
    (response) => {
        //成功回调
        //简化数据
        // console.log(response);
        return response.data
    },
    (error) => {
        console.log(error);
        //失败回调:处理http网络错误的
        //定义一个变量:存储网络错误信息
        let message = ''
        //http状态码
        const status = error.response ? error.response.status : null
        // let navigate = useNavigate()
        switch (status) {
            case 401:
                message = '未授权，请登录'
                break
            case 403:
                message = '无权访问'
                break
            case 404:
                message = '请求地址错误'
                break
            case 500:
                message = '服务器出现问题'
                break
            default:
                message = '网络出现问题'
                break
        }
        //提示错误信息
        messageApi.error(message)
        if (status === 401 || status === 403) {
            localStorage.removeItem('token')
            window.location.href = '/login'; // 直接跳转到登录页面
        }

        return Promise.reject(error)
    },
)

//对外暴露
export default request
